Real-time remote collaboration is becoming increasingly important in both business and education environments. For example, collaboration can support remote Help Desks over the Web (e.g. a customer can receive assistance from a bank officer to fill out a loan application), distance learning (e.g. students can see a lecture being given remotely and can ask the instructor questions), and business applications (e.g. collaborative word processing, document review, etc.).
In advanced collaborative applications, it is necessary to share information among multiple users. Each user needs to be able to see the current state of shared information. Moreover, each user should be able to manipulate and change this shared information. Finally, manipulation should occur in a controlled way, in order to prevent information corruption from simultaneous access.
Existing collaboration systems limit the application programmer to a single set of locking, update, and unlocking semantics. For example, one known system provides implicit locks based on which user currently has keyboard focus on the application; the user relinquishes the lock by releasing application focus. In this system, every keystroke generates an update event to other participants in the collaboration. Applications have no way to change the locking behavior or to cause string update events to be sent less frequently.
In general, it is preferable for an application to have the capability to allow any one of a variety of locking behaviors and to allow different locking behaviors for different elements of shared text. For example, whereas one string may be associated with an implicit lock (granted when the user gives that string focus), another string may have an explicit lock (granted when the user takes some particular action such as clicking on a "lock" button), while yet another string may have a deferred lock (granted only when the user attempts to update the string). A similar range of possibilities is available for string update events and for unlocking the string.
Therefore, there exists a need to provide the application developer with a system for integrating a wide range of locking, unlocking, and updating strategies for shared data. Moreover, such a system should allow the developer to assign different semantics to each element of shared data in an application.